﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace Admin2024.Domain.DomainService.Tool
{
    public static class PasswordHasher
    {
        public static string GenerateSalt() // 定义一个名为GenerateSalt的静态公共方法，用于生成盐
        {
            using (var rng = new RNGCryptoServiceProvider()) // 使用RNGCryptoServiceProvider生成安全的随机数
            {
                var salt = new byte[16]; // 创建一个16字节的数组来存储盐
                rng.GetBytes(salt); // 填充数组的随机字节
                return Convert.ToBase64String(salt); // 将盐转换为Base64字符串并返回
            }
        }

        public static string HashPassword(string password, string salt) // 定义一个名为HashPassword的静态公共方法，接收密码和盐作为参数
        {
            using (var sha256 = new SHA256Managed()) // 使用SHA256Managed类创建SHA-256哈希算法的实例
            {
                var saltedPassword = Encoding.UTF8.GetBytes(salt + password); // 将盐和密码组合并转换为字节数组
                var hash = sha256.ComputeHash(saltedPassword); // 使用SHA-256算法计算字节数组的哈希值
                return Convert.ToBase64String(hash); // 将哈希值转换为Base64字符串并返回
            }
        }
    }
}
